<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>字典和散列表</title>
</head>

<body>
    <script>
        // 集合、字典和散列表可以存储不重复的值。在集合中，我们感兴趣的是每个值本身，并把它 当作主要元素。在字典中，我们用[键，值]的形式来存储数据。在散列表中也是一样(也是以[键， 值]对的形式来存储数据)。但是两种数据结构的实现方式略有不同

        // 字典 Dictionary
        // set(key,value):向字典中添加新元素。
        // delete(key):通过使用键值来从字典中移除键值对应的数据值。
        // has(key):如果某个键值存在于这个字典中，则返回true，反之则返回false。 
        // get(key):通过键值查找特定的数值并返回。
        // clear():将这个字典中的所有元素全部删除。
        // size():返回字典所包含元素的数量。与数组的length属性类似。
        // keys():将字典所包含的所有键名以数组形式返回。
        // values():将字典所包含的所有数值以数组形式返回。

        function Dictionary() {

            var items = {};

            this.set = function (key, value) {
                items[key] = value; //{1}
            };

            this.delete = function (key) {
                if (this.has(key)) {
                    delete items[key];
                    return true;
                }
                return false;
            };

            this.has = function (key) {
                return items.hasOwnProperty(key);
                //return value in items;
            };

            this.get = function (key) {
                return this.has(key) ? items[key] : undefined;
            };

            this.clear = function () {
                items = {};
            };

            this.size = function () {
                return Object.keys(items).length;
            };

            this.keys = function () {
                return Object.keys(items);
            };

            this.values = function () {
                var values = [];
                for (var k in items) {
                    if (this.has(k)) {
                        values.push(items[k]);
                    }
                }
                return values;
            };

            this.each = function (fn) {
                for (var k in items) {
                    if (this.has(k)) {
                        fn(k, items[k]);
                    }
                }
            };

            this.getItems = function () {
                return items;
            }
        }

        let DictionaryDemo = new Dictionary();
        DictionaryDemo.set("a", "123131")
        DictionaryDemo.set("b", "123131")
        DictionaryDemo.set("c", "123131")
        DictionaryDemo.set("d", "123131")
        DictionaryDemo.set("e", "123131")
        DictionaryDemo.set("f", "123131")
        DictionaryDemo.set("g", "123131")
        console.log(DictionaryDemo.each())
    </script>
</body>

</html>